package 算法.图.有向图;

import java.util.Iterator;

import 算法.图.util.DirectedEdge;
import edu.princeton.cs.algs4.Bag;

/**
 * 【有向图：带权有向图】
 * 		
 * @Date   2017-09-04 10：19
 * @author Administrator
 * @version 
 */
public class EdgeWeightedDigraph {
	public int V, E;						//节点数，边数
	public Bag<DirectedEdge>[] adjs;		//临接表
	public EdgeWeightedDigraph(int V, int E) {
		this.V = V;
		this.E = E;
		this.adjs = new Bag[V];
	}
	
	public void add(DirectedEdge edge) {
		adjs[edge.from()].add(edge);
		E++;
	}
	
	/**
	 * 得到可以遍历某一个起点的所有边的迭代器
	 * @param v	某个起点
	 * @return
	 */
	public Iterable<DirectedEdge> getAdjsIterator(int v) {
		return adjs[v];
	}
	
	/**
	 * 得到图中所有的边
	 * @return
	 */
	public Iterable<DirectedEdge> edges() {
		Bag<DirectedEdge> bag = new Bag();
		for (int from = 0; from < adjs.length; from++)
			for (DirectedEdge edge : adjs[from])	
				bag.add(edge);
		return bag;
	}
}
